home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
docs
/
pasctxt
/
chap13.txt
< prev
next >
Wrap
Text File
|
1988-01-15
|
15KB
|
389 lines
CHAPTER 13 - Units in TURBO Pascal 4.0
THIS IS FOR TURBO PASCAL 4.0 USERS ONLY
If you are using TURBO Pascal version 3.0 or earlier,
you will find that none of the programs in this chapter can
be compiled or run with your system, but it would be to your
advantage to read this material anyway.
When Niclaus Wirth originally defined Pascal, it was
intended to be a very small language to be used primarily
for teaching programming concepts to computer neophytes. A
program would be contained in a single file and compiled in
its entirety each time it was compiled. There was no
provision for splitting a program up into smaller parts,
compiling each part separately, and linking all of the parts
together into a final completed package.
Since human beings make mistakes, and because the
entire program must be recompiled each time any mistake is
discovered, pure Pascal is unsuitable for very large
programs. Seeing this problem, many compiler writers have
defined some method by which a large program could be broken
down into smaller parts and separately compiled.
This chapter will define and illustrate the way Borland
has chosen to do so.
PART OF A PROGRAM
Load the program named AREAS and display it on your
monitor. This is the first example of a TURBO Pascal "unit"
and although it is similar to a program in many ways, it has
a few differences which must be pointed out. We will start
by pointing out the major sections, then get into the
details of each section.
You will first notice that this program begins with the
reserved word "unit" instead of our unusal "program",
followed by the unit name, Areas. In line 10, the reserved
word "interface" is used and all of the statements following
it down to the next reserved word "implementation", are part
of the interface with any program outside of this unit. The
next reserved word used is "implementation" and gives the
definitions and executable parts of the private portion of
the unit.
Finally, in lines 48 through 50, we find what appears
to be a program block just like we have been using all
through this tutorial, but actually is not. We will see in
a few paragraphs that this is the initialization section and
does a very specific job for us even though somewhat
different than what we have become used to.
Page 84
CHAPTER 13 - Units in TURBO Pascal 4.0
THE INTERFACE PART
Following the unit name we have a section of code in
lines 10 through 15 that define the interface of this module
to the outside world. Anything defined here is available to
the outside world and can be used by any other program
provided it has a "uses Areas;" statement in it. Constants,
types, and variables could also be defined here, and if they
were, they too would be available to any user program, but
in this case, only the four functions are made available. It
should be fairly obvious that the functions calculate the
areas of four different geometric shapes.
THE IMPLEMENTATION PART
From line 16 through line 47 we have the implementation
part as delineated by the reserved word "implementation" and
the beginning of the initialization block. The
implementation part is the actual workhorse of the unit
since it contains all of the executable code for the four
functions defined above.
Lines 26 through 31 contain the code needed to generate
the area of a circle, and this code is no different than the
code that would be used if this function were placed in the
declaration part of any Pascal program. There is a
difference in the function header since the formal
parameters are not repeated here. TURBO Pascal allows you
to either drop the formal parameters here or include them if
you think the code would be more readable. If you include
them, they must be exactly as shown in the interface part or
you will get a compile error.
A LOCAL PROCEDURE
In lines 20 through 24, we have a procedure that is
used within one of the four functions, namely the first. It
is really a stupid procedure since it really wastes time
setting up linkage for the procedure call and does nothing
that couldn't be done just as easy with a simple multiply,
but it does illustrate that you can use another procedure
within the unit body. The procedure Mult_Two_Numbers cannot
be used outside of this unit because it is not included in
the interface part of the unit. It is, in effect, invisible
to the outside world.
The variable My_Pi would be more correctly represented
as a constant but it is defined as a variable to illustrate
use of the body of the unit later. Since My_Pi is not
defined in the interface part of the unit, it also is
Page 85
CHAPTER 13 - Units in TURBO Pascal 4.0
invisible to the outside world and in fact protected from
accidental corruption by a misplaced statement in another
program. The procedure and the variable for all practical
purposes have an impenetrable barrier around them protecting
them from unauthorized use by the outside world, but the
functions internal to this unit have free access to them
just as in any other program.
WHAT IS THE BODY USED FOR?
Lines 48 through 50 constitute the body of the unit and
although they appear to consist of another executable
program that can be called and used, they actually perform
another very specific and useful purpose. It is actually an
initialization section and all of the statements in this
part of the unit are executed once and only once, and they
are executed when the main program is loaded. This is done
automatically for you by the system. There is no way
provided for you to call the statements in the body after
the program has begun execution. This is why the variable
My_Pi was defined as a variable, so we could use this
section to initialize it to a useful value.
The body can actually have function and procedure calls
that are executed when the program is loaded, as well as
loops or conditional statements.
If you would like to execute some statements during
initialization and again during the execution of the program
one or more times, you can write a procedure or function to
accomplish your desires and call it at the appropriate times
in the main program.
SELECTIVE NAMING OF FUNCTIONS AND PROCEDURES
If you will study the interface part of this unit you
will find that everything you need to use this unit is
contained within it, provided that you know enough about
plane geometry to understand the functions. You should
strive for this understanding in all of your interfaces so
that the implementation doesn't even require consultation.
Keep in mind, that if you need to, you can include comments
to further define the functions in the interface part of the
unit.
At this time, you should compile this unit. You will
have to compile it to disk rather than only to memory so it
will be available for use later in this chapter. You do
this by using the menus to change the Compile/Destination to
the Disk option. Note that it will not generate an .EXE
Page 86
CHAPTER 13 - Units in TURBO Pascal 4.0
file but instead a .TPU file. This is Borland's filename
extension for a unit.
ANOTHER UNIT
Load the file named PERIMS for another example of a
unit. This is similar to the last except that it does not
contain an internal procedure, and it is composed of three
procedures that calculate the perimeters of geometric
shapes, all of which are visible to the outside world
because they are included in the interface part of the unit.
Once again, we have a private variable named My_Pi and a
block of code (actually a single statement) to initialize
the value of My_Pi when the unit is loaded.
Be sure you compile this unit to disk in the same
manner as the last and they will be ready for use.
Now that we have several functions and procedures that
can be used to calculate the areas or perimiters of several
different shapes, we need a program to illustrate their use,
so if you load and display the program named GARDEN you will
have an example of their use.
HOW DO WE USE OUR DEFINED UNITS?
GARDEN is a very simple program that uses one of the
functions and one of the procedures. The only thing you
must do is add the names of the units prior to using the
external functions or procedures. Lines 16 and 17 each use
one of our newly defined routines. As you can see, there is
nothing magic about the new routines, and once you include
the unit names in a uses statement, the new routines are in
a sense, an extension to the Pascal language.
Compile and run this program and see that it really
does what you expect it to do.
ONE MORE EXAMPLE OF UNIT USE
Load and display the program named SHAPES4 for another
example of using a predefined unit. In line 3, this program
includes our new unit named Areas so all four of the area
functions are available, and in fact, all four are used
within the body of the program. This program should not be
difficult for you to understand and you will be left to
study it on your own. You should observe that this program
is repeated in chapter 14 in a different form for users of
TURBO Pascal 3.0.
Page 87
CHAPTER 13 - Units in TURBO Pascal 4.0
MULTIPLE USES OF AN IDENTIFIER
Suppose we wanted to move the variable named My_Pi to
the interface section in both of the units we defined
earlier. Then in the program named GARDEN when we included
both of the units in the uses statement, both variables
named My_Pi would be available for use so we would have a
bit of a problem defining which one we really meant to use.
TURBO Pascal has a way to tell the system which one you wish
to use by using a qualifier in much the same way that you
use a field of a record. The variable name Areas.My_Pi
would refer to that variable from the unit named Areas, and
the name Perims.My_Pi would refer to the variable from the
unit named Perims.
You could even define a new variable of the same name
in your main program and refer to it by the qualified name
Garden.My_Pi if you chose to. This is not recommended as it
would get very confusing to you. The compiler would be very
happy to compile and run such a program, because it would
not get confused.
WHY USE UNITS?
There are basically three reasons to use units in your
programming. First, some programs are so large that they
should be broken up into smaller chunks for ease of handling
and reasonable compilation size. In fact some are so large
that they cannot be compiled all at one time since TURBO
Pascal has an upper limit of 64K of code which can be
compiled at once. Most other compilers have a similar limit
also.
Secondly, once you complete the code to perform a
certain job, you may wish to use the same code in another
program to do the same job. If you put the code in a unit,
it is ready to simply call and use again. This is becoming
a rather important topic in software engineering usually
referred to as "Reusable Software".
THIS IS INFORMATION HIDING
Finally, it is sometimes important to hide a portion of
code from the rest of the program to assure that it cannot
be unduly modified by an error somewhere else in the
program. This too is becoming an important area of software
engineering and is usually referred to as information
hiding.
Page 88
CHAPTER 13 - Units in TURBO Pascal 4.0
PROGRAMMING EXERCISE
1. Move My_Pi to the interface in both units and change
one of the values slightly to see if you can read in
the right one at the right time. Define another
variable of the same name in your main program and see
if you can differentiate between all three values.
Page 89